ajuste = {
	flag: true,
	
	bindEvents: function(){
		
		$(".tipoMov").change(function(){
			var id = $(this).val();
			formData = {};
			formData.idTipoMovimiento = id;
			if(id != "-1"){
				request = $.ajax({
		    	    url : "DevolverConceptos",
		    	    type: "POST",
		    	    data : formData,
		    	});
				request.done(function (response, textStatus, jqXHR){
					$("#conceptoMov option").remove();
					$("select#conceptoMov").append("<option value=\"-1\">Concepto Movimiento</option>");
					$.each(response.conceptos , function(i, v){
						$("select#conceptoMov").append("<option value=\""+v.idConcepto+"\">"+v.descConcepto+"</option>");
					});
					$("select#conceptoMov").val(-1);
				});
			}
		});
		
		//Obtener producto a partir de su codigo 
		$(document).on("blur","#primero",function(){
			var input = $(this);
			var tr = $(this).closest("tr");
			var id = $(this).val().trim();
			var idAlm = $(".almacen").val();
			if(idAlm != "-1"){
				var formData = { "id":id,"idAlmacen":idAlm };
				var request; 
					if(id != ""){
					request = $.ajax({
			    	    url : "ObtenerProducto",
			    	    type: "POST",
			    	    data : formData,
			    	});
					request.done(function (response, textStatus, jqXHR){
						//Muy rustico el JSON para el error. 
						//TODO: Mejorar el formato del JSON en el servlet
						if(response.error && response.error == "error"){
							input.parent().addClass("has-error");
							ajuste.mostrarNotificacion("Codigo incorrecto, por favor intente nuevamente", "top right", "error");
							tr.find("td").eq(1).text("");
							tr.find("td .cantidad").prop("disabled", true);
							tr.find("td a").addClass("none");
						}else{
							console.log(response);
							input.parent().removeClass("has-error");
							tr.find("td").eq(1).text(response.descripcion);
							tr.find("td .cantidad").prop("disabled", false);
							tr.find("td .none").removeClass("none");
							//Guardo el stock oculto para validar en caso de que el ajuste sea egreso
							if(response.stock){
								tr.find("td #hiddenStock").val(response.stock);
							}else{
								tr.find("td #hiddenStock").val(0);
							}
						}
					});
					request.fail(function (jqXHR, textStatus, errorThrown){
				        ajuste.mostrarNotificacion("No se pudo recuperar los datos, por favor intente nuevamente", "top right", "error");
				    });
				}	
			}else{
				ajuste.mostrarNotificacion("Debe seleccionar un almacen", "top right", "error");
			}
		});
		
		//Valida cantidad ingresada
		$(document).on("change",".cantidad",function(e){
			var cant = $(this).val();
			var stockDisp = $(this).closest("tr").find("td #hiddenStock").val();
			if($.isNumeric(cant)){
				ajuste.flag = true;
				if($("#tipoMov").val() == "2" && Number(cant) > Number(stockDisp)){
					ajuste.flag = false;
					$(this).parent().addClass("has-warning");
					$(this).val("");
					if(Number(stockDisp) == 0){
						ajuste.mostrarNotificacion("El producto no tiene stock en dicho almacen", "top right", "warn");
					}else{
						ajuste.mostrarNotificacion("La cantidad ingresada es superior al stock disponible", "top right", "warn");
					}
				}
			}else{
				ajuste.flag = false;
				ajuste.mostrarNotificacion("Formato de cantidad incorrecto", "top right", "error");
				$(this).val("");
				$(this).parent().addClass("has-error");
			}
		});
		
		//Agregar una nueva fila a la tabla
		$(document).on("blur",".cantidad",function(){
			//Elemento para agregar una fila nueva
			var last = $('.firstTable > tbody:last');
			//Elemento para verificar si la ultima fila tiene la descripcion vacia
			var lasttr = $('.firstTable tbody tr:last');
			if(lasttr.find("td").eq(1).text() != "" && ajuste.flag){
					last.append("<tr><td width=\"15%\">" +
							"<input type=\"text\" id=\"primero\" class=\"form-control\" name=\"id_producto\"></td>" +
							  "<td width=\"60%\"></td>" +
							  "<td width=\"15%\"><input type=\"number\" class=\"form-control cantidad\" value=\"0\" name=\"cantidadAjustada\" disabled></td>" +
							  "<td width=\"10%\"><a href=\"#\" class=\"btn btn-inverse none\"><i class=\"glyphicon glyphicon-remove\"></i></a ></td>" +
							  "<td hidden><input type=\"hidden\" value=\"\" id=\"hiddenStock\" name=\"hiddenStock\"></td>" +
							"</tr>");
			}
			//Si hace falta hacemos el scroll de la tabla
		    $('.firstTable > tbody').animate({scrollTop:$('.table > tbody').height()}, 'slow');
			
			//Con esto no dejamos salir al usuario del input cantidad
			if(!ajuste.flag){
				$(this).focus();
			}
		});
		
		$(document).on("click", "a .glyphicon-remove", function() {
			var parent = $(this).closest("tr");
	    	var cant = $( ".firstTable tbody tr" ).length;
	    	if(cant > 1){
	    	  parent.hide('slow', function(){ parent.remove();				
	    	  								});
		    } 	
		});
		
		$(".btnAddModal").on("click", function(){
			var input = $('.firstTable tbody tr:last input#primero');
			var id = $('input[name=prod]:checked', '.tableSecond').val();
			input.val(id);
			input.trigger("blur");
			$(".tableSecond tbody tr").remove();
			$(".searchCategoria").val("Categoria");
			$(".searchRubro").val("Rubro");
			$(".searchSubRubro").val("SubRubro");
			$(".searchMarca").val("Marca");
		});
		
		//Limpia los select de busqueda cuando se cierra la ventana modal
		$(".btnCloseModal").on("click",function(){
			$(".tableSecond tbody tr").remove();
			$(".searchCategoria").val("Categoria");
			$(".searchRubro").val("Rubro");
			$(".searchSubRubro").val("SubRubro");
			$(".searchMarca").val("Marca");
		});
		
		//Limpia los select de busqueda cuando se cierra la ventana modal (desde la crucesita de arriba)
		$(".close").on("click",function(){
			$(".tableSecond tbody tr").remove();
			$(".searchCategoria").val("Categoria");
			$(".searchRubro").val("Rubro");
			$(".searchSubRubro").val("SubRubro");
			$(".searchMarca").val("Marca");
		});
		
		$(".searchButton a").on("click", function(){
			//Obtenemos los valores de los selects y el input
			var categoria = $(".searchCategoria").val();
			var rubro = $(".searchRubro").val();
			var subRubro = $(".searchSubRubro").val();
			var marca = $(".searchMarca").val();
			var desc = $(".searchDesc").val().trim();
			var elem = [categoria, rubro, subRubro, marca];
			//LLamamos a la func. para buscar los productos
			ajuste.buscarProductos(elem, desc);
		});
		
		$(".btnConfirmar").click(function(event){
	    	if($(".tipoMov").val() == "-1"){
	    		ajuste.mostrarNotificacion("Error: Debe seleccionar un tipo de movimiento", "top right", "error");
	    		event.preventDefault();
	    	}
	    	if($(".conceptoMov").val() == "-1"){
	    		ajuste.mostrarNotificacion("Error: Debe seleccionar un concepto", "top right", "error");
	    		event.preventDefault();
	    	}
	    	if($(".almacen").val() == "-1"){
	    		ajuste.mostrarNotificacion("Error: Debe seleccionar un almacen", "top-rigiht","error");
	    		event.preventDefault();
	    	}
	    });
	},
	
	buscarProductos: function(elem, desc){
		//Aramamos el JSON para enviar al AJAX
		var names = ["categoria" , "rubro", "subRubro", "marca"];
		var formData = {};
		for (var i = 0; i < elem.length; i++) { 
			if(Number(elem[i])){
				formData[names[i]] = elem[i];  
			}
		}
		if (desc || !desc.length === 0){
			formData["descripcion"] = desc;
		}
		var request = $.ajax({
    	    url : "BuscarProductos",
    	    type: "POST",
    	    data : formData,
    	});
		//Si todo esta bien armamos la tablita
		request.done(function (response, textStatus, jqXHR){
			var products = response["products"];
			var last = $('.tableSecond > tbody:last');
			if (products.length>0){
				$(".tableSecond > tbody").find("tr").remove();
				for ( var i = 0; i < products.length; i++) {
					last.append("<tr><td width=\"5%\">" +
							"<input type=\"radio\" name=\"prod\" value=\""+products[i].id+"\"></td>" +
							  "<td width=\"25%\">"+products[i].id+"</td>" +
							  "<td width=\"70%\">"+products[i].desc+"</td></tr>");
					}
			}
			else{
				$(".tableSecond thead").notify(
						  "No existen productos para la combinacion seleccionada", 
						  { position:"bottom" }
						);
			}
			
		});
		request.fail(function (jqXHR, textStatus, errorThrown){
			 ajuste.mostrarNotificacion("No se pudo recuperar el producto correspondiente, por favor intente nuevamente", "top right", "error");
	    });
	},
	
	mostrarNotificacion: function(str, position, type){
		//Para aprender como se usa la libreria: http://notifyjs.com/
		$.notify(str, { globalPosition: position,
				  		className: type,
				  		clickToHide: true,
				  		autoHide: true,
				  		autoHideDelay: 4000,
			     	  });
	},
	
	startEvents: function(){
		//Rellenamos el campo de la fecha con el formato correpondiente
		var dt = new Date();
		var month = Number(dt.getMonth()) + 1;
		var newdate = dt.getFullYear() + "/" + month + "/" + dt.getDate();
		$('.date input').val(newdate);
		//Bindeamos todos los eventos
		ajuste.bindEvents();
	},
},

$( document ).ready(function() {
	ajuste.startEvents();
});